//
//  OAuthViewController.swift
//  vveboSwiftPro
//
//  Created by 杨笑怡 on 15/6/28.
//  Copyright © 2015年 YangXiaoYi. All rights reserved.
//

import UIKit
import SVProgressHUD
import AFNetworking

class OAuthViewController: UIViewController,UIWebViewDelegate {

    private let VVebo_Client_ID = "2863461789"
    private let VVebo_Redirect_URI = "http://baidu.com"
    private let VVwbo_App_Secret = "d2b40a8a3c3219ede9919ac08477e222"
    
    // 1. webView 加载授权界面
    lazy var webView:UIWebView? = {
        let v = UIWebView()
        v.delegate = self
        return v
    }()
    
    override func loadView() {
        // 根视图就是iwebView
        view = webView
        
        // 设置 nav 的信息
        title = "新浪微博"
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "关闭", style: UIBarButtonItemStyle.Plain, target: self, action: "close")
    }
    
    ///  关闭当前窗口
    func close() {
        SVProgressHUD.dismiss()
         dismissViewControllerAnimated(true, completion: nil)
    }
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 加载授权页面
        loadOAuthPage()
        
    }
    ///  加载授权页面
    private func loadOAuthPage() {
        let urlString = "https://api.weibo.com/oauth2/authorize?client_id=\(VVebo_Client_ID)&redirect_uri=\(VVebo_Redirect_URI)"
        
        // ! 表示一定能够生成
        let url = NSURL(string: urlString)!
        
        webView?.loadRequest(NSURLRequest(URL: url))
    }
    
    // MARK: - UIWebViewDelegate
    // 在iOS开发中，如果代理方法返回true，表示一切正常，如果返回false，表示什么都不做
    
    /**
    初始
    URL: https://api.weibo.com/oauth2/authorize?client_id=2863461789&redirect_uri=http://baidu.com
    登录成功
    URL: https://api.weibo.com/oauth2/authorize
    
    *** 授权成功 - 授权码
    URL: https://baidu.com/?code=6de74bde79bcbe0a29b7425f809ae439
    URL: https://www.baidu.com/?code=6de74bde79bcbe0a29b7425f809ae439
    
    取消授权
    URL: https://www.baidu.com/?error_uri=%2Foauth2%2Fauthorize&error=access_denied&error_description=user%20denied%20your%20request.&error_code=21330
    
    1> 如果是新浪的 URL，就继续加载
    2> 如果是回调地址，需要根据 URL 中的内容，判断是否有授权码
    */
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
        // 0. URL 的完整字符串
        let urlString = request.URL!.absoluteString
        
        // 1> 如果是新浪的 URL，就继续加载
        if !urlString.hasPrefix(VVebo_Redirect_URI) {
            return true
        }
        
        // 2> 如果是回调地址，需要根据 URL 中的内容，判断是否有授权码
        // 获取请求 URL 中的 查询字符串
        let query = request.URL!.query!
        let codeStr = "code="
        
        // 判断是否包含 code=
        if query.hasPrefix(codeStr) {
            // 返回的是字节数长度
//            let from = codeStr.lengthOfBytesUsingEncoding(NSUTF8StringEncoding)
            
//            let code = (query as NSString).substringFromIndex((codeStr as NSString).length)
            // advance 向前推进  start 是开始的位置  递增 n 的长度
            let code = query.substringFromIndex(advance(codeStr.endIndex, 0))
            print("获取授权码\(code)")
            loadAccessToken(code)
        } else {
            print("取消授权")
            close()
        }
        
        return false
    }
    
    ///  开始加载
    func webViewDidStartLoad(webView: UIWebView) {
        SVProgressHUD.show()
    }
    ///  结束加载
    func webViewDidFinishLoad(webView: UIWebView) {
        SVProgressHUD.dismiss()
    }
    
    // 使用授权码加载 token
    private func loadAccessToken(code:String) {
        // 1. urlString
        let urlString = "oauth2/access_token"
        // 2. 请求参数
        let params = ["client_id": VVebo_Client_ID,
            "client_secret": VVwbo_App_Secret,
            "grant_type": "authorization_code",
            "code": code,
            "redirect_uri": VVebo_Redirect_URI]
        // 3. 发起网络请求
//        NetworkTools.sharedNetworkTools().responseSerializer = AFHTTPResponseSerializer()
        NetworkTools.sharedNetworkTools().POST(urlString, parameters: params, success: { (_, JSON) -> Void in
            print(JSON)
            
            // 测试数据类型
//            let str = NSString(data: JSON as! NSData, encoding: NSUTF8StringEncoding)

            
            // 字典转模型 -》加载用户信息 ，链式调用
            UserAccount(dict: JSON as! [String: AnyObject]).loadUserInfo { (account, error) -> () in
                
                // 判断账户信息是否正确
                if account != nil {
                    print(account)
                    // 1. 设置全局的 account
                    sharedUserAccount = account
                    
                    // 2. 发送通知
                    // false 表示显示welcomeview
                    NSNotificationCenter.defaultCenter().postNotificationName(XLSwitchRootVCNotification, object: false)
                    
                    // 3. 关闭当前控制器
                    self.close()
                    
                    return
                }
                print(error)
                SVProgressHUD.showInfoWithStatus("您的网络不给力")
            }
            
            // 保存信息
//            account.saveAccount()
            }) { (_, error) -> Void in
                print(error)
                SVProgressHUD.showInfoWithStatus("您的网络不给力")
        }
        
    }
    ///  相当于dealloc
    deinit {
        print("88~~~")
    }

}
